﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace BDSim
{
    public class AirTrackSimulationDLL
    {
        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：InitTrack
        //函数功能： 轨迹仿真初始化
        //输入:
        //       (1)Conffilename  ：配置的轨迹命令文件
        //      （2）Limitfilename ：配置的限值文件
        //       (3)SimStep ： 仿真步长(1ms~1000ms)
        //       (4)OutStep ： 轨迹数据输出步长(1ms~1000ms)
        //       (5)CoorType ： 坐标系类别
        //       (6) TranType ： 旋转顺序
        //输出:
        //       无 
        //返回值 :无
        //其他说明：无
        //被本函数调用的函数清单： 无 
        //调用本函数的函数清单：无
        ///////////////////////////////////////////////////////////////////////////////////////////
        /**************************姿态矩阵旋转的顺序****************************/
        /*设置坐标系以及旋转次序
            CoorType=	0:导航坐标系(东北天) 载体坐标系(右前上) 	CoorType=1:导航坐标系(北东地) 载体坐标系(左前下)
             CoordinateType = 0时	Y(航向)、P(俯仰)、R(横滚)；
              TranType=1：Y、P、R	......绕Z轴(旋转Yaw)——绕X轴(旋转Pitch)——绕Y轴(旋转Roll)
              TranType2：Y、R、P	......绕Z轴(旋转Yaw)——绕Y轴(旋转Roll)——绕X轴(旋转Pitch)
              TranType3：P、Y、R	......绕X轴(旋转Pitch)——绕Z轴(旋转Yaw)——绕Y轴(旋转Roll)
              TranType4：P、R、Y	......绕X轴(旋转Pitch)——绕Y轴(旋转Roll)——绕Z轴(旋转Yaw)
              TranType5：R、Y、P	......绕Y轴(旋转Roll)——绕Z轴(旋转Yaw)——绕X轴(旋转Pitch)
              TranType6：R、P、Y	......绕Y轴(旋转Roll)——绕X轴(旋转Pitch)——绕Z轴(旋转Yaw)
            CoordinateType = 1时	Y(航向)、P(俯仰)、R(横滚)；
              TranType1：Y、P、R	......绕Z轴(旋转Yaw)——绕Y轴(旋转Pitch)——绕X轴(旋转Roll)
              TranType2：Y、R、P	......绕Z轴(旋转Yaw)——绕X轴(旋转Roll)——绕Y轴(旋转Pitch)
              TranType3：P、Y、R	......绕Y轴(旋转Pitch)——绕Z轴(旋转Yaw)——绕X轴(旋转Roll)
              TranType4：P、R、Y	......绕Y轴(旋转Pitch)——绕X轴(旋转Roll)——绕Z轴(旋转Yaw)
              TranType5：R、Y、P	......绕X轴(旋转Roll)——绕Z轴(旋转Yaw)——绕Y轴(旋转Pitch)
              TranType6：R、P、Y	......绕X轴(旋转Roll)——绕Y轴(旋转Pitch)——绕Z轴(旋转Yaw)	*/
        /************************************************************************/
        [DllImport("AirTrackSimulationDLL.dll", EntryPoint = "InitTrack", CallingConvention = CallingConvention.Cdecl)]
        public static extern bool InitTrack(char[] Conffilename, char[] Limitfilename, double SimStep, double OutStep, int CoorType, int TranType);

        ///////////////////////////////////////////////////////////////////////////////////////////
        //函数名称：GetOneData
        //函数功能： 按照设定的输出步长获取轨迹数据点
        //输出:
        //       (1) m_data ：轨迹、姿态数据
        //       (2) ExcpInfo ：与设定条件不符合的异常信息
        //返回值 :无
        //其他说明：无
        //被本函数调用的函数清单： 无 
        //调用本函数的函数清单：无
        /////////////////////////////////////////////////////////////////////////////////////////// 
        /*******************************************************************\
         *功能
              获取一个步长的计算结果
         *参数
              m_data：返回轨迹点信息
              ExcpInfo：计算返回信息
         *返回值
              0 计算失败、还没有计算完成等原因，没有正确获取坐标点信息
              1 计算正确，正确获取坐标点信息
              2 已经全部计算完轨迹命令，没有坐标点信息可供返回

        \*******************************************************************/
        [DllImport("AirTrackSimulationDLL.dll", EntryPoint = "GetOneData", CallingConvention = CallingConvention.Cdecl)]
        public static extern short GetOneData(out OutPoint m_data, out AirExceptionMsg ExcpInfo);
    }
}
